/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.srm.manejadores;

import co.srm.dao.JPAGenericDAO;
import co.srm.entidades.Cliente;
import co.srm.entidades.Cobrador;
import co.srm.entidades.Prestamo;
import java.util.Date;
import java.util.List;

/**
 *
 * @author TilZon
 */
public class ManejadorPrestamo {

    private JPAGenericDAO<Prestamo> daoPrestamo;
    public static Long idLastPrestamo = null;

    public ManejadorPrestamo() {
        this.daoPrestamo = new JPAGenericDAO<Prestamo>(Prestamo.class);
    }

    public boolean crarPrestamo(String idStr, String codigo, String monto, String plazo, String neto, String interes, String valorCuota, Date fecha, String saldoActual, String observacion, Prestamo.EstadoActual estadoP, Prestamo.ModoPago modo, Cobrador cobrador, Cliente cliente, boolean editar) {
        Prestamo p = null;
        Double montoP = 0.0;
        Integer plazoP = 0;
        Double netoP = 0.0;
        Double interesP = 0.0;
        Double valorCuotaP = 0.0;
        Double saldoActualP = 0.0;
        Long cod = null;
        try {
            montoP = Double.parseDouble(monto);
            plazoP = Integer.parseInt(plazo);
            netoP = Double.parseDouble(neto);
            interesP = Double.parseDouble(interes);
            valorCuotaP = Double.parseDouble(valorCuota);
            saldoActualP = Double.parseDouble(saldoActual);
            cod = Long.parseLong(codigo);

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        if (idStr == null) {
            p = new Prestamo();
            p.setCodigo(cod);
            p.setMonto(montoP);
            p.setPlazo(plazoP);
            p.setNeto(netoP);
            p.setInteres(interesP);
            p.setValorCuota(valorCuotaP);
            p.setFecha(fecha);
            p.setSaldoActual(saldoActualP);
            p.setEstadoActual(estadoP);
            p.setModoPago(modo);
            String observ = (observacion.isEmpty() ? "No Suministrada" : observacion);
            p.setObservacion(observ);
            p.setCliente(cliente);
            p.setCobrador(cobrador);

        }


        boolean estado = daoPrestamo.save(p);
        if (estado) {
            idLastPrestamo = idUltimoPrestamo();
        }


        return estado;
    }

    public Prestamo consultarPrestamoById(String idStr) {
        Long id = null;
        Prestamo p = null;
        try {
            id = new Long(idStr);
        } catch (Exception e) {
            return null;
        }

        p = daoPrestamo.getById(id);

        if (p != null) {
            return p;
        } else {
            return null;
        }
    }

    public Prestamo consultarPrestamoByCodigo(String codigo) {
        Long cod = null;
        Prestamo p = null;

        List<Prestamo> prestamos = null;
        try {
            cod = new Long(codigo.trim());
            prestamos = daoPrestamo.get("SELECT p FROM Prestamo p WHERE p.codigo = " + cod);
            if (!prestamos.isEmpty()) {
                p = prestamos.get(0);
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        if (p != null) {
            return p;
        } else {
            return null;
        }
    }

    public List<Prestamo> buscarPrestamosByEstado(Prestamo.EstadoActual estado) {
        List<Prestamo> prestamos = null;
        prestamos = daoPrestamo.get("SELECT p FROM Prestamo p WHERE p.estadoActual = '" + estado + "' ORDER BY p.fecha DESC");


        if (!prestamos.isEmpty()) {
            return prestamos;
        } else {
            return null;
        }

    }

    public Long idUltimoPrestamo() {
        List<Prestamo> presta = null;
        presta = daoPrestamo.get("SELECT MAX(p) FROM Prestamo p");

        if (!presta.contains(null)) {
            if (presta != null) {
                return presta.get(0).getCodigo();
            } else {
                return null;
            }
        } else {
            return null;
        }

    }

    public boolean actualizarPrestamo(Prestamo p) {
        boolean estado = daoPrestamo.save(p);

        return estado;
    }

    public boolean eliminarPrestamo(long id){
      boolean estado = daoPrestamo.remove(id);
      return estado;
    }
}
